import akshare as ak
import pandas as pd
from datetime import datetime

# ===== 可配置的宏变量 =====
STOCK_CODE = "600519"  # 股票代码
PERIOD = "15"          # 周期: 1(1分钟), 5(5分钟), 15(15分钟), 30(30分钟), 60(60分钟)
START_DATE = "20250101"  # 开始日期 (格式: YYYYMMDD)
FILE_PREFIX = "moutai"  # 文件前缀
# =========================

def fetch_stock_min_data(stock_code, period, start_date):
    """
    获取股票分钟级别数据
    
    参数:
    stock_code: 股票代码
    period: 周期 (1, 5, 15, 30, 60)
    start_date: 开始日期 (格式: YYYYMMDD)
    """
    try:
        # 获取股票分钟周期数据
        data = ak.stock_zh_a_hist_min_em(symbol=stock_code, 
                                        period=period,
                                        start_date=start_date, 
                                        end_date=datetime.now().strftime("%Y%m%d"),
                                        adjust="")
        
        if data.empty:
            print("未获取到数据，请检查股票代码和日期范围")
            return None
            
        # 重命名列
        data.rename(columns={
            '时间': 'date_time',
            '开盘': 'open',
            '最高': 'high',
            '最低': 'low',
            '收盘': 'close',
            '成交量': 'volume'
        }, inplace=True)
        
        # 转换日期时间格式
        data['date_time'] = pd.to_datetime(data['date_time'])
        
        # 重置索引
        data.reset_index(drop=True, inplace=True)
        
        return data[['date_time', 'open', 'high', 'low', 'close', 'volume']]
        
    except Exception as e:
        print(f"获取数据时出错: {str(e)}")
        return None

# 获取数据
stock_data = fetch_stock_min_data(STOCK_CODE, PERIOD, START_DATE)

if stock_data is not None:
    # 显示数据基本信息
    period_text = f"{PERIOD}分钟" if PERIOD != "1" else "1分钟"
    print(f"获取了从 {START_DATE} 到 {datetime.now().strftime('%Y%m%d')} 的{STOCK_CODE} {period_text}数据")
    print(f"数据形状: {stock_data.shape}")
    print("\n前5行数据:")
    print(stock_data.head())
    
    # 保存为CSV文件
    current_date = datetime.now().strftime('%Y-%m-%d')
    filename = f"{FILE_PREFIX}_{period_text}_{START_DATE}_{current_date}.csv"
    stock_data.to_csv(filename, index=False)
    print(f"\n数据已保存到: {filename}")
else:
    print(f"未能获取股票{STOCK_CODE}的数据")